<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>UUencode</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/UUencode"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-UUencode rootpage-UUencode skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">UUencode</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>UUencode</b> war das erste verbreitete Programm, das es ermöglichte, <a href="Bin%C3%A4rdatei" title="Binärdatei">Binärdateien</a> (also z. B. Bilder oder Programme) so umzuwandeln, dass sie nur noch aus „druckbaren ASCII-Zeichen“ bestehen und dadurch problemlos per <a href="E-Mail" title="E-Mail">E-Mail</a> verschickt werden konnten, in denen nur <a href="American_Standard_Code_for_Information_Interchange" title="American Standard Code for Information Interchange">ASCII</a>-Zeichen erlaubt sind.
</p>
<div class="mw-heading mw-heading2"><h2 id="Geschichte">Geschichte</h2></div>
<p>UUencode wurde 1980 von <a href="Mary_Ann_Horton" title="Mary Ann Horton">Mary Ann Horton</a> entwickelt.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>Das UU steht für die Wurzeln in <a href="Unix" title="Unix">Unix</a>. Das UU in UUencode und -decode steht ebenso wie das UU bei <a href="Unix_to_Unix_Copy" title="Unix to Unix Copy">UUcp</a> für <b>U</b>NIX to <b>U</b>NIX <i>copy protocol</i>, also die Übertragung von einem UNIX-Computer zu einem anderen UNIX-Computer.
</p><p>Das Prinzip ist dabei ähnlich wie beim heute für E-Mail-Anhänge üblichen <a href="Base64" title="Base64">Base64</a>-Verfahren: Drei Bytes der Binärdatei (=24 bit) werden auf viermal 6 Bit aufgeteilt und den 6-bit-Werten werden druckbare ASCII-Zeichen zugeordnet. Erste Versionen von UUencode benutzten dabei einfach die ASCII-Zeichen mit den Werten 32 bis 95.
</p><p>Da das <a href="Leerzeichen" title="Leerzeichen">Leerzeichen</a> (ASCII-Wert 32) den <a href="E-Mail" title="E-Mail">E-Mail</a>-Versand oft nicht heil übersteht, wurde stattdessen das ASCII-Zeichen mit dem Wert 96 ("<code>`</code>") verwendet.
</p>
<div class="mw-heading mw-heading2"><h2 id="Dateiformat">Dateiformat</h2></div>
<p>UUencode benutzt ein spezielles Format für die kodierte Datei:
</p>
<dl><dd><code><b>begin</b></code> <i>modus dateiname</i></dd>
<dd><i>länge daten</i></dd>
<dd><i>länge daten</i></dd>
<dd><i>...</i></dd>
<dd><i>länge daten</i></dd>
<dd><code><b>`</b></code></dd>
<dd><code><b>end</b></code></dd></dl>
<p>Als <i>modus</i> werden dabei die Dateirechte, wie sie unter Unix üblich sind, als 3- oder 4-stellige <a href="Oktalsystem" title="Oktalsystem">Oktalzahl</a> geschrieben. Der <i>Dateiname</i> ist der Name der Originaldatei, ohne Verzeichnis.
</p><p>Jede Datenzeile beginnt mit einer 1-Byte-Längenangabe, die angibt, wie viele Originalbytes in dieser Zeile kodiert worden sind. Diese Längenangabe ist eine Zahl zwischen 1 und 63 und wird dabei ebenfalls uu-kodiert, also als Zeichen von "<code>!</code>" bis "<code>_</code>".
Üblich sind 45 Byte (also der Wert "<code>M</code>") die in 60 Zeichen kodiert werden.
</p><p>Um das Ende der Datei anzuzeigen, muss stets eine „Leerzeile“ kodiert werden,
die nur das Längenbyte 0 (kodiert "<code>`</code>") enthält. Abschließend folgt eine Zeile mit dem Schlüsselwort <code><b>end</b></code>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Kodierungsverfahren">Kodierungsverfahren</h2></div>
<p>Drei Bytes Quelldaten werden durch <code>uuencode</code> in vier Bytes kodiert. Die Daten liegen in der uuencodierten Datei in den unteren sechs Bits der Bytes, die oberen Bits werden durch die Kodierung gesetzt:
</p>
<pre> unkodierter Bitstrom ↔ kodierter Bitstrom
aaaaaaaa bbbbbbbb cccccccc ↔ 0kaaaaaa 0kaabbbb 0kbbbbcc 0kcccccc
</pre>
<p>Zur Kodierung werden die neuen Sechsergruppen "00eeeeee" zunächst mit 32 <a href="XOR" class="mw-redirect" title="XOR">XOR</a>-verknüpft.
Ist das daraus resultierende Ergebnis ≤ 32, so wird das Bit k gesetzt.
</p>
<pre>uncodiert (XOR 32) (k setzen?) codiert
[0] = [00000000] → [00100000] -ja→ [01100000] = [96]
[1,31] = [00000001,00011111] → [00100001,00111111] -nein→ [00100001,00111111] = [33,63]
[32,63] = [00100000,00111111] → [00000000,00011111] -ja→ [01000000,01011111] = [64,95]
</pre>
<p>Anders ausgedrückt: Für 0 ist das Ergebnis 96, für alle anderen muss 32 addiert werden.
</p><p>Die Dekodierung der Daten arbeitet umgekehrt, vier Bytes Quelldaten werden durch <code>uudecode</code> in drei Bytes decodiert.
Ist in den Quelldaten das Bit k gesetzt, ist dieses zu entfernen.
Das daraus resultierende Ergebnis wird dann mit 32 <a href="XOR" class="mw-redirect" title="XOR">XOR</a>-verknüpft.
</p>
<pre>codiert (k entfernen) (XOR 32) uncodiert
[96] = [01100000] -ja→ [00100000] → [00000000] = [0]
[33,63] = [00100001,00111111] -nein→ [00100001,00111111] → [00000001,00011111] = [1,31]
[64,95] = [01000000,01011111] -ja→ [00000000,00011111] → [00100000,00111111] = [32,63]
</pre>
<p>Anders ausgedrückt: Für 96 ist das Ergebnis 0, für alle anderen muss 32 subtrahiert werden.
</p>
<pre> kodierter Bitstrom ↔ unkodierter Bitstrom
0kaaaaaa 0kaabbbb 0kbbbbcc 0kcccccc ↔ aaaaaaaa bbbbbbbb cccccccc
</pre>
<div class="mw-heading mw-heading2"><h2 id="Beispiel">Beispiel</h2></div>
<p>Ein Textabsatz von oben diene als Eingabe:
</p>
<pre>Geschichte
Das UU steht für die Wurzeln in UNIX. Das UU in UUencode und -decode steht
ebenso wie das UU bei UUcp für UNIX to UNIX copy protocol. Also die Übertragung
von einem UNIX-Computer zu einem anderen UNIX-Computer.
</pre>
<p>Die UUencodierung macht daraus:
</p>
<pre>begin 644 uuencode-Test.txt
M1V5S8VAI8VAT90T*#0I$87,@554@<W1E:'0@9OQR(&1I92!7=7)Z96QN(&EN
M(%5.25@N($1A<R!552!I;B!5565N8V]D92!U;F0@+61E8V]D92!S=&5H="`-
M"F5B96YS;R!W:64@9&%S(%55(&)E:2!556-P(&;\<B!53DE8('1O(%5.25@@
M8V]P>2!P<F]T;V-O;"X@06QS;R!D:64@W&)E<G1R86=U;F<@#0IV;VX@96EN
M96T@54Y)6"U#;VUP=71E<B!Z=2!E:6YE;2!A;F1E<F5N(%5.25@M0V]M<'5T
%97(N#0H`
`
end
</pre>
<div class="mw-heading mw-heading2"><h2 id="XXencode">XXencode</h2></div>
<p><b>XXencode</b> arbeitet genauso wie UUencode, verwendet aber ausschließlich Buchstaben und Ziffern und die beiden Sonderzeichen Plus (+) und Minus (-). Dies soll das Risiko, dass einige Zeichen in der Textdatei durch automatische Zeichensatzumwandlungen (z. B. von ASCII nach <a href="Extended_Binary_Coded_Decimals_Interchange_Code" class="mw-redirect" title="Extended Binary Coded Decimals Interchange Code">EBCDIC</a>) während der Übertragung irreparabel beschädigt werden, minimieren.
</p><p>Zusätzlich besteht bei einigen xxencode-Versionen die Möglichkeit, optional eine Liste sämtlicher verwendeter Zeichen mitzuschicken. Wenn diese Liste durch fehlerhafte Zeichensatzumwandlungen ebenfalls modifiziert wird, kann der Empfänger dies erkennen und die Datei trotzdem korrekt dekodieren, solange die Modifizierungen <a href="Bijektivit%C3%A4t" class="mw-redirect" title="Bijektivität">umkehrbar eindeutig</a> sind.
</p>
<table class="wikitable">
<caption>Kodierungstabelle von XXencode
</caption>
<tbody><tr class="hintergrundfarbe6">
<th>Wert
</th>
<th>Zeichen
</th>
<td rowspan="17" style="width:1px;background:#000000;padding:0px;">
</td>
<th>Wert
</th>
<th>Zeichen
</th>
<td rowspan="17" style="width:1px;background:#000000;padding:0px;">
</td>
<th>Wert
</th>
<th>Zeichen
</th>
<td rowspan="17" style="width:1px;background:#000000;padding:0px;">
</td>
<th>Wert
</th>
<th>Zeichen
</th></tr>
<tr>
<td>0</td>
<td><code>+</code></td>
<td>16</td>
<td><code>E</code></td>
<td>32</td>
<td><code>U</code></td>
<td>48</td>
<td><code>k</code>
</td></tr>
<tr>
<td>1</td>
<td><code>-</code></td>
<td>17</td>
<td><code>F</code></td>
<td>33</td>
<td><code>V</code></td>
<td>49</td>
<td><code>l</code>
</td></tr>
<tr>
<td>2</td>
<td><code>0</code></td>
<td>18</td>
<td><code>G</code></td>
<td>34</td>
<td><code>W</code></td>
<td>50</td>
<td><code>m</code>
</td></tr>
<tr>
<td>3</td>
<td><code>1</code></td>
<td>19</td>
<td><code>H</code></td>
<td>35</td>
<td><code>X</code></td>
<td>51</td>
<td><code>n</code>
</td></tr>
<tr>
<td>4</td>
<td><code>2</code></td>
<td>20</td>
<td><code>I</code></td>
<td>36</td>
<td><code>Y</code></td>
<td>52</td>
<td><code>o</code>
</td></tr>
<tr>
<td>5</td>
<td><code>3</code></td>
<td>21</td>
<td><code>J</code></td>
<td>37</td>
<td><code>Z</code></td>
<td>53</td>
<td><code>p</code>
</td></tr>
<tr>
<td>6</td>
<td><code>4</code></td>
<td>22</td>
<td><code>K</code></td>
<td>38</td>
<td><code>a</code></td>
<td>54</td>
<td><code>q</code>
</td></tr>
<tr>
<td>7</td>
<td><code>5</code></td>
<td>23</td>
<td><code>L</code></td>
<td>39</td>
<td><code>b</code></td>
<td>55</td>
<td><code>r</code>
</td></tr>
<tr>
<td>8</td>
<td><code>6</code></td>
<td>24</td>
<td><code>M</code></td>
<td>40</td>
<td><code>c</code></td>
<td>56</td>
<td><code>s</code>
</td></tr>
<tr>
<td>9</td>
<td><code>7</code></td>
<td>25</td>
<td><code>N</code></td>
<td>41</td>
<td><code>d</code></td>
<td>57</td>
<td><code>t</code>
</td></tr>
<tr>
<td>10</td>
<td><code>8</code></td>
<td>26</td>
<td><code>O</code></td>
<td>42</td>
<td><code>e</code></td>
<td>58</td>
<td><code>u</code>
</td></tr>
<tr>
<td>11</td>
<td><code>9</code></td>
<td>27</td>
<td><code>P</code></td>
<td>43</td>
<td><code>f</code></td>
<td>59</td>
<td><code>v</code>
</td></tr>
<tr>
<td>12</td>
<td><code>A</code></td>
<td>28</td>
<td><code>Q</code></td>
<td>44</td>
<td><code>g</code></td>
<td>60</td>
<td><code>w</code>
</td></tr>
<tr>
<td>13</td>
<td><code>B</code></td>
<td>29</td>
<td><code>R</code></td>
<td>45</td>
<td><code>h</code></td>
<td>61</td>
<td><code>x</code>
</td></tr>
<tr>
<td>14</td>
<td><code>C</code></td>
<td>30</td>
<td><code>S</code></td>
<td>46</td>
<td><code>i</code></td>
<td>62</td>
<td><code>y</code>
</td></tr>
<tr>
<td>15</td>
<td><code>D</code></td>
<td>31</td>
<td><code>T</code></td>
<td>47</td>
<td><code>j</code></td>
<td>63</td>
<td><code>z</code>
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Verwandte_Themen">Verwandte Themen</h2></div>
<ul><li>7plus – im Amateurfunk eingesetztes effizienteres und zudem fehlersicheres Kodierungsverfahren</li>
<li><a href="Kermit_(Software)" title="Kermit (Software)">Kermit</a> – Protokoll, das Binärzeichen ebenfalls auf ASCII-Zeichen abbildet.</li>
<li><a href="Base64" title="Base64">Base64</a> – Kodierung nach <a href="Multipurpose_Internet_Mail_Extensions" title="Multipurpose Internet Mail Extensions">MIME</a>, das in E-Mails verwendet wird, um Binärdateien zu übertragen.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.webutils.pl/UUencode">Online UUencode / UUdecode tool</a></li>
<li><a rel="nofollow" class="external text" href="http://www.webutils.pl/XXencode">Online XXencode / XXdecode tool</a></li>
<li><a rel="nofollow" class="external text" href="http://www.gnu.org/software/sharutils/">GNU sharutils</a> – Das sharutils Softwarepaket der Free Software Foundation enthält uuencode und uudecode.</li>
<li><a rel="nofollow" class="external text" href="http://www.fpx.de/fp/Software/UUDeview/">UUDeview</a> – Ein Open-Source Programm zum Encodieren und Decodieren von Base64, BinHex für Unix/Windows/DOS</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.tuhs.org/cgi-bin/utree.pl?file=4BSD/usr/man/cat1/uuencode.1c">tuhs.org</a></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-02-10" href="https://de.wikipedia.org/wiki/?title=UUencode&oldid=253192325">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>